package com.tedu.api.socket.thread;
/**
 * 线程---创建 3种
 * 第一种：子类 继承Thread 方案--【使用率不多】
 *       ①编写子类 MyThread 继承Thread
 *       ②子类，重写run方法【线程运行】
 *       ③实例化MyThread 对象 调用start方法【启动线程】
 * 第二种：子类 实现Runnable 方案--【推荐用法】
 *       ①编写子类My1 实现Runnable接口
 *       ②子类，强制重写run方法【线程运行】
 *       ③实例化MyRunnable1对象【没有start方法】
 *       ④创建Tread对象，把实例化MyRunnable1 对象通过构造器
 *       ⑤调用Thread对象 start方法
 *线程 继承thread 内嵌入Runnable接口  重写run方法
 *    JavaOOP---缺点：Java支持单继承，子类继承Thread
 *    无法拓展:不仅线程，其他集合，继承其他类，只具备线程功能
 *    启动线程方法 start()----线程生命周期内
 *    缺点：线程创建编写不便
 *    实现Runnable 真正线程运行--定义run方法，线程运行状态
 *    优点:继承还可以实现--拓展性
 *    缺点：线程创建不方便---项目：步骤逻辑清晰
 * 第三种：匿名内部类实现线程-->Lambda表达式
 *
 *  JavaOOP:封装--内部类：成员内部类，方法内部类，静态内部类，匿名内部类
 *  匿名内部类创建方式、
 *  对象 引用=new 对象(){};
 *  匿名内部类--创建一次===子实现类实例化一次Thread/Runnable
 *            优点：省去创建子类对象名称---接口创建，抽象类创建；
 */
public class TR {
    public static void main(String[] args) {
        //①类只需要实例化一次：匿名内部类--Thread
        Thread t1=new Thread(){
            public void run(){
                for(int i=0;i<1000;i++){
                    System.out.println("花园宝宝~~");
                }
            }
        };
        t1.start();
        //2.类只需要实例化一次；匿名内部类---Runnable
        Thread t2=new Thread(new Runnable(){
            public void run() {
                 for(int i=0;i<1000;i++){
                     System.out.println("噢噢噢噢~~");
                 }
            }
        });
        t2.start();
    }


}
